package iot.wlink.controller;

import com.alibaba.fastjson.JSONObject;
import iot.wlink.bean.vo.DeviceTemplateVo;
import iot.wlink.bean.vo.ScriptCodecVo;
import iot.wlink.network.devices.model.DeviceModel;
import iot.wlink.service.DeviceTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author : willian fu
 * @date : 2021/9/16
 */
@RestController
@RequestMapping("device/template")
public class DeviceTemplateController {

    @Autowired
    private DeviceTemplateService templateService;

    /**
     * 查询模板列表
     * @return 模板简略信息
     */
    @GetMapping
    public Object getTemplateList(){
        return templateService.getTemplateList();
    }

    /**
     * 查询模板详情
     * @param tid 模板ID
     * @return 详情信息
     */
    @GetMapping("detail/{tid}")
    public Object getTemplatesDetail(@PathVariable String tid){
        return templateService.getTemplatesDetail(Long.parseLong(tid));
    }

    /**
     * 创建设备模板
     * @param templateVo 模板信息
     * @return 创建结果
     */
    @PostMapping
    public Object createTemplate(@RequestBody DeviceTemplateVo templateVo){
        return templateService.createTemplate(templateVo);
    }


    @PutMapping("model")
    public Object setThingsModel(@RequestBody DeviceModel model){
        return templateService.setThingsModel(model);
    }

    @PutMapping("codec")
    public Object setDataScriptCodec(@RequestBody ScriptCodecVo codec){
        return templateService.setDataScriptCodec(codec);
    }

    /*@PutMapping
    public Object updateTemplate(@RequestBody Integer tid){
        return templateService.updateTemplate();
    }*/

    /**
     * 删除模板，只能删除下挂设备为0的模板
     * @param tid 模板ID
     * @return 删除结果
     */
    @DeleteMapping("{tid}")
    public Object delTemplate(@PathVariable Integer tid){
        return templateService.delTemplate(tid);
    }

    /**
     * 更新模板状态
     * @param tid 模板ID
     * @param status 状态 开发中、已上线、已停用
     * @return 更新结果
     */
    @PutMapping("status/{tid}/{status}")
    public Object putTemplateStatus(@PathVariable Integer tid, @PathVariable Integer status){
        return templateService.putTemplateStatus(tid, status);
    }
}
